package com.itany.corejava.code08_常用类.其他类;

import com.itany.corejava.util.DateUtil;
import com.sun.org.apache.bcel.internal.generic.CALOAD;

import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;

/**
 * @author 石小俊
 * @version 1.0
 * @date 2023年03月17日 13:57
 */
public class Test01_日历类 {
    public static void main(String[] args) throws ParseException {
        // 抽象类不能进行实例化操作,即无法通过构造方法创建对象
        // 但是该类本身提供了对应的构造器
        // 构造器:所有能够获取对象的方式都称之为构造器
        // 构造方法只是最常用的一种构造器
        // 通过提供的静态方法获取对应的实例
        Calendar calendar = Calendar.getInstance();

        // 常用方法
        // getTime():转换成Date
        Date date = calendar.getTime();
        System.out.println(DateUtil.toString(date));

        // setTime(Date date):设置一个新的日历时间
        // calendar.setTime(DateUtil.toDate("2022-3-17 14:00:00"));
        // System.out.println("更改后的时间:"+DateUtil.toString(calendar.getTime()));

        // get():获取日期的指定字段的值
        // 字段值参考API文档,其值是一个常量
        // 该方法需要传递对应的常量值,用来判断取出的是哪一个字段
        // 这些字段本质上被Calendar处理完存放在一个数组中
        // 这些常量值对应的是数组的下标
        System.out.println(calendar.get(Calendar.YEAR) + "年");
        // 其值是0-11,0表示1月,11表示12月
        System.out.println((calendar.get(Calendar.MONTH) + 1) + "月");
        System.out.println(calendar.get(Calendar.DATE) + "日");
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH) + "日");
        // 表示一周的第几天,每周从周日开始,返回值为1-7,1表示周日,7表示周六
        System.out.println("一周的第" + calendar.get(Calendar.DAY_OF_WEEK) + "天");
        // 十二小时制
        System.out.println(calendar.get(Calendar.HOUR) + "时");
        // 二十四小时制
        System.out.println(calendar.get(Calendar.HOUR_OF_DAY) + "时");
        System.out.println(calendar.get(Calendar.MINUTE) + "分");
        System.out.println(calendar.get(Calendar.SECOND) + "秒");
        System.out.println(calendar.get(Calendar.MILLISECOND) + "毫秒");

        // set(field,value):对指定字段设置一个新的值
        calendar.set(Calendar.YEAR, 2020);
        // calendar.set(Calendar.MONTH, 2-1);
        // 其值可以超出0-11的范围,如果超出了会自动进行运算
        // 例如:-1表示今年的一月份的上个月,即去年的12月
        calendar.set(Calendar.MONTH, -1);
        // 天数也会进行自动的运算
        calendar.set(Calendar.DATE,32);
        System.out.println(DateUtil.toString(calendar.getTime()));

        calendar = Calendar.getInstance();
        // add(field,amount):对指定的字段进行运算
        // 年份-1
        calendar.add(Calendar.YEAR,-1);
        // 月份+1
        calendar.add(Calendar.MONTH,1);
        // 天数+100
        calendar.add(Calendar.DATE,100);
        // 2小时后
        calendar.add(Calendar.HOUR_OF_DAY,2);
        System.out.println(DateUtil.toString(calendar.getTime()));

        // 获取距离标准时间的毫秒数
        System.out.println(calendar.getTimeInMillis());

        // clear():清空,将日历重置为标准时间,即:1970-01-01 00:00:00
        calendar.clear();
        System.out.println(DateUtil.toString(calendar.getTime()));
    }
}
